// 根据一棵树的中序遍历与后序遍历构造二叉树。

// 注意:
// 你可以假设树中没有重复的元素。

// 中序遍历：左->根->右
// 后序遍历：左->右->根

function buildTree2(inorder: number[], postorder: number[]): TreeNode | null {
    // 递归出口
    if (inorder.length < 1) {
        return null;
    }
    const rootValue: number = postorder[postorder.length - 1];// 根节点值
    // 注意！！rootIndex值还额外是左子树的元素个数
    const rootIndex: number = inorder.indexOf(rootValue);// 找到中序遍历中的索引
    const root: TreeNode = new TreeNode(rootValue);// 根节点
    root.left = buildTree2(inorder.slice(0, rootIndex),
        postorder.slice(0,rootIndex));// 定位出左子树的数组范围
    root.right = buildTree2(inorder.slice(rootIndex + 1, inorder.length),
        postorder.slice(rootIndex,postorder.length - 1));// 定位出右子树的数组范围
    return root;
};

// 这道题的具体构造方法可以参考LC-106，也是一道比较经典的例题。